package com.qixiaobao.insure.mapper;

import com.qixiaobao.insure.domain.Insure;
import com.qixiaobao.insure.domain.SupplyInsureInfo;
import com.qixiaobao.insure.domain.dto.InsureDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * @Description 保单信息 数据层
 * @Author yangxm
 * @Date 2025/6/17 9:29
 */
@Mapper
public interface InsureMapper {
    

    /**
     * @Description 查询保单列表
     * @Author yangxm
     * @Date 2025/6/17 9:31
     * @param insureDTO
     * @return java.util.List<com.qixiaobao.insure.domain.Insure>
     */
    List<Insure> selectInsureList(InsureDTO insureDTO);

    /**
     * @Description 批量匹配投保列表
     * @Author yangxm
     * @Date 2025/6/17 9:31
     * @param insureIdList
     * @return java.util.List<com.qixiaobao.insure.domain.Insure>
     */
    List<Insure> matchInsureList(List<Long> insureIdList);

    /**
     * @Description 获取保单费用合计
     * @Author yangxm
     * @Date 2025/6/17 14:26
     * @param insureDTO
     * @return java.math.BigDecimal
     */
    BigDecimal selectCopeInsureFeeTotal(InsureDTO insureDTO);

    /**
     * @Description 获取保单人员合计
     * @Author yangxm
     * @Date 2025/6/17 14:26
     * @param insureDTO
     * @return java.lang.Integer
     */
    Integer selectInsurePersonTotal(InsureDTO insureDTO);

    /**
     * @Description 查询需要下载的银行回单ID集合
     * @Author yangxm
     * @Date 2025/6/18 10:10
     * @param insureDTO
     * @return java.util.List<java.lang.Long>
     */
    List<Long> selectPaymentProofIdList(InsureDTO insureDTO);

    /**
     * @Description 校验订单编号是否存在
     * @Author yangxm
     * @Date 2025/6/18 10:10
     * @param qxbOrderNo
     * @return com.qixiaobao.insure.domain.Insure
     */
    Insure checkIsExistByQxbOrderNo(String qxbOrderNo);

    /**
     * @Description 批量更新保单编号
     * @Author yangxm
     * @Date 2025/6/18 10:10
     * @param qxbOrderNoList
     * @return int
     */
    int updateInsureNoByQxbOrderNoList(List<String> qxbOrderNoList);

    /**
     * @Description 匹配投保更新保单号和保单文件
     * @Author yangxm
     * @Date 2025/6/18 11:24
     * @param insure
     * @return int
     */
    int updateMatchInsureInfo(Insure insure);

    /**
     * @Description 根据保单id查询保单信息
     * @Author yangxm
     * @Date 2025/6/18 11:28
     * @param id
     * @return com.qixiaobao.insure.domain.Insure
     */
    Insure selectToInsureByToInsureId(Long id);

    /**
     * @Description 根据匹配后的保单id集合，查询匹配后的保单信息，并以传入参数匹配后的供应商简称排序
     * @Author yangxm
     * @Date 2025/6/18 11:35
     * @param toInsureIdList    匹配后的保单id集合
     * @param toSupplyShortNameList  匹配后的供应商简称
     * @return java.util.List<com.qixiaobao.insure.domain.Insure>
     */
    List<Insure> selectToInsureByToInsureIdList(@Param("toInsureIdList") List<Long> toInsureIdList, @Param("toSupplyShortNameList") List<String> toSupplyShortNameList);

    /**
     * @Description 根据订单编号集合，批量更新保单文件
     * @Author yangxm
     * @Date 2025/6/18 14:47
     * @param qxbOrderNoList
     * @return int
     */
    int updateInsureFileByQxbOrderNoList(List<String> qxbOrderNoList);

    /**
     * @Description 根据订单编号批量删除保单凭证合并文件
     * @Author yangxm
     * @Date 2025/6/18 14:48
     * @param qxbOrderNoList
     * @return int
     */
    int deleteInsureFileProofMergeUrlByQxbOrderNoList(List<String> qxbOrderNoList);

    /**
     * @Description 根据保单id查询保单信息
     * @Author yangxm
     * @Date 2025/6/18 14:49
     * @param insureId
     * @return com.qixiaobao.insure.domain.Insure
     */
    Insure selectInsureById(Long insureId);

    /**
     * @Description 根据订单编号查询保单信息
     * @Author yangxm
     * @Date 2025/6/18 14:49
     * @param qxbOrderNo
     * @return com.qixiaobao.insure.domain.Insure
     */
    Insure selectInsureByQxbOrderNo(String qxbOrderNo);


    /**
     * @Description 根据保单id更新保单号
     * @Author yangxm
     * @Date 2025/6/18 14:50
     * @param insure
     * @return int
     */
    int updateInsureNoById(Insure insure);

    /**
     * @Description 根据订单编号批量查询保单信息
     * @Author yangxm
     * @Date 2025/6/18 14:50
     * @param qxbOrderNoList
     * @return java.util.List<com.qixiaobao.insure.domain.Insure>
     */
    List<Insure> selectInsureByQxbOrderNoList(List<String> qxbOrderNoList);


    /**
     * @Description 校验订单编号，返回存在的订单编号
     * @Author yangxm
     * @Date 2025/6/19 16:14
     * @param qxbOrderNoList
     * @return java.util.List<java.lang.String>
     */
    List<String> checkByQxbOrderNoList(List<String> qxbOrderNoList);

    /**
     * @Description 校验保单号，返回存在的保单号
     * @Author yangxm
     * @Date 2025/6/19 16:14
     * @param insureNoList
     * @return java.util.List<java.lang.String>
     */
    List<String> checkByInsureNoList(List<String> insureNoList);

    /**
     * @Description 校验订单编号，返回保单文件不存在的订单编号
     * @Author yangxm
     * @Date 2025/6/19 16:19
     * @param qxbOrderNoList
     * @return java.util.List<java.lang.String>
     */
    List<String> checkSuccessInsureFileByQxbOrderNoList(List<String> qxbOrderNoList);

    /**
     * @Description 校验保单号，返回保单文件不存在的保单号
     * @Author yangxm
     * @Date 2025/6/19 16:21
     * @param insureNoList
     * @return java.util.List<java.lang.String>
     */
    List<String> checkSuccessInsureFileByInsureNoList(List<String> insureNoList);

    /**
     * @Description 保单号维护，更新保单中的保单号
     * @Author yangxm
     * @Date 2025/6/19 16:57
     * @param supplyInsureInfo
     * @return int
     */
    int updateInsureNoBatch(SupplyInsureInfo supplyInsureInfo);

    /**
     * @Description 保单号维护，更新增减员费用的保单号
     * @Author yangxm
     * @Date 2025/6/19 16:57
     * @param supplyInsureInfo
     * @return int
     */
    int updateAdminusCharge(SupplyInsureInfo supplyInsureInfo);

    /**
     * @Description 保单号维护，更新保单费用的保单号
     * @Author yangxm
     * @Date 2025/6/19 16:57
     * @param supplyInsureInfo
     * @return int
     */
    int updateInsureCharge(SupplyInsureInfo supplyInsureInfo);

    /**
     * @Description 保单号维护，获取供应商设置的保单号
     * @Author yangxm
     * @Date 2025/6/19 16:57
     * @param supplyId
     * @param dateInfo
     * @return int
     */
    SupplyInsureInfo getSupplyInsureno(@Param("supplyId") Long supplyId, @Param("dateInfo") String dateInfo);

    /**
     * @Description 保单号维护，更新供应商设置的保单号
     * @Author yangxm
     * @Date 2025/6/19 16:57
     * @param supplyInsureInfo
     * @return int
     */
    int updateSupplyInsureNo(SupplyInsureInfo supplyInsureInfo);

    /**
     * @Description 保单号维护，保存供应商设置的保单号
     * @Author yangxm
     * @Date 2025/6/19 16:57
     * @param supplyInsureInfo
     * @return int
     */
    int saveSupplyInsureNo(SupplyInsureInfo supplyInsureInfo);

    /**
     * @Description 保单号维护，查询供应商设置的保单号
     * @Author yangxm
     * @Date 2025/6/19 16:57
     * @param supplyInsureInfo
     * @return java.util.List<com.qixiaobao.insure.domain.Insure>
     */
    List<Insure> selectSupplyInsureNoList(SupplyInsureInfo supplyInsureInfo);

    /**
     * @Description 校验订单编号，返回凭证文件不存在的订单编号
     * @Author yangxm
     * @Date 2025/6/20 9:41
     * @param qxbOrderNoList
     * @return java.util.List<java.lang.String>
     */
    List<String> checkSuccessCustomerInsDecFileByQxbOrderNoList(List<String> qxbOrderNoList);

    /**
     * @Description 更新保单中的凭证文件
     * @Author yangxm
     * @Date 2025/6/20 10:58
     * @param insureId
     * @param customerInsDec
     * @return int
     */
    int updateInsureCustomerInsDec(@Param("insureId") Long insureId, @Param("customerInsDec") String customerInsDec);

    /**
     * @Description 查询满足条件的保单id集合
     * @Author yangxm
     * @Date 2025/6/20 14:45
     * @param insureDTO
     * @return java.util.List<java.lang.Long>
     */
    List<Long> selectIdList(InsureDTO insureDTO);

    /**
     * @Description 根据保单id查询该保单的保单文件、供应商保单文件、凭证
     * @Author yangxm
     * @Date 2025/6/20 14:45
     * @param ids
     * @return java.util.List<com.qixiaobao.insure.domain.Insure>
     */
    List<Insure> selectInsureFileByIdList(List<Long> ids);

    /**
     * @Description 删除保单文件、供应商保单文件、凭证
     * @Author yangxm
     * @Date 2025/6/20 14:45
     * @param id
     * @return int
     */
    int  removeAllFile(Long id);

    /**
     * @Description 根据id批量删除保单凭证合并文件
     * @Author yangxm
     * @Date 2025/6/20 14:45
     * @param ids
     * @return int
     */
    int deleteInsureFileProofMergeUrlByIds(List<Long> ids);


    /**
     * @Description 根据保单id 查询保单信息
     * @Author yangxm
     * @Date 2025/6/23 8:57
     * @param ids
     * @return java.util.List<com.qixiaobao.insure.domain.Insure>
     */
    List<Insure> selectInsureListByIdList(List<Long> ids);

    /**
     * @Description 删除原始保单文件
     * @Author yangxm
     * @Date 2025/6/23 8:57
     * @param id
     * @return int
     */
    int deleteOriginalInsureFile(Long id);

    /**
     * @Description 查找原始保单文件为null的保单信息，返回值为订单编号
     * @Author yangxm
     * @Date 2025/7/2 14:36
     * @param qxbOrderNoList
     * @return java.util.List<java.lang.String>
     */
    List<String> checkSuccessOriginalInsureFileByQxbOrderNoList(List<String> qxbOrderNoList);

    /**
     * @Description 查找原始保单文件为null的保单信息，返回值为保单号
     * @Author yangxm
     * @Date 2025/7/2 14:37
     * @param insureNoList
     * @return java.util.List<java.lang.String>
     */
    List<String> checkSuccessOriginalInsureFileByInsureNoList(List<String> insureNoList);

    /**
     * @Description 根据订单号查询原始保单信息
     * @Author yangxm
     * @Date 2025/7/2 14:47
     * @param qxbOrderNo
     * @return java.util.List<com.qixiaobao.insure.domain.Insure>
     */
    List<Insure> selectOriginalInsureByQxbOrderNo(String qxbOrderNo);

    /**
     * @Description 根据保单号查询原始保单信息
     * @Author yangxm
     * @Date 2025/7/2 14:48
     * @param insureNo
     * @return java.util.List<com.qixiaobao.insure.domain.Insure>
     */
    List<Insure> selectOriginalInsureByInsureNo(String insureNo);

    /**
     * @Description 查询原始保单文件不存在的订单编号集合
     * @Author yangxm
     * @Date 2025/7/2 14:50
     * @param qxbOrderNoList
     * @return java.util.List<java.lang.String>
     */
    List<String> selectNotOriginalInsureFileQxbOrderNoList(List<String> qxbOrderNoList);

    /**
     * @Description 根据订单编号，更新原始保单文件
     * @Author yangxm
     * @Date 2025/7/2 14:50
     * @param insure
     * @return int
     */
    int updateOriginalInsureFileByOrderNoList(Insure insure);
}
